namespace Digitalmes.Application.Services;

/// <summary>
/// 工单操作服务。
/// </summary>
public interface IWorkOrderService : IApplicationService
{
    /// <summary>
    /// 获取工单编号并增加投产数量。
    /// </summary>
    /// <param name="productId">产品 Id</param>
    /// <param name="cancellationToken"></param>
    /// <returns>工单编号，没有找到可用工单则返回 null</returns>
    Task<string?> GetWoAndIncrementStartedQtyAsync(long productId, CancellationToken cancellationToken = default);

    /// <summary>
    /// 工单良品数量自增长。
    /// </summary>
    /// <remarks>根据系统配置，若有设置自动完工，会在增长后满足 "计划数量 = 实际生产数量 [+包含数量]" 条件下自动完成工单。</remarks>
    /// <param name="wo">工单</param>
    /// <param name="cancellationToken"></param>
    /// <returns>是否已完工</returns>
    Task<bool> IncrementGoodQtyAsync(string wo, CancellationToken cancellationToken = default);

    /// <summary>
    /// 工单报废数量自增长。
    /// </summary>
    /// <param name="wo">工单</param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<bool> IncrementScrapQtyAsync(string wo, CancellationToken cancellationToken = default);
}
